﻿using System;
using System.Collections.Generic;
using Logger;
using System.Reflection;
using ClickLand.CorporacionPlaza.AccesoDato.Contratos;
using ClickLand.CorporacionPlaza.Comunes.Entidades;
using ClickLand.CorporacionPlaza.Comunes.Recursos;
using NHibernate;

namespace ClickLand.CorporacionPlaza.AccesoDato.Implementacion.NHibernateMySql
{
    /// <summary> Clase que implementa el contrato IDaoCliente  </summary>
    public class DaoClienteNHibernateMySql:DaoBase<Cliente>,IDaoCliente
    {
        /// <summary> Metodo que consulta los datos de un cliente dados unos parametros </summary>
        /// <param name="parametros">parametros de la consulta</param>
        /// <returns>lista de cliente</returns>
        public List<Cliente> Consultar(Cliente parametros)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Logger.Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            List<Cliente> listaEntidad = null;

            try
            {
                IQuery query = Session.CreateQuery(ConsultasHQL.ConsultaCliente)
                    .SetParameter("nombre",string.Format("%{0}%",string.IsNullOrEmpty(parametros.Nombre)?null:parametros.Nombre))
                    .SetParameter("estado",parametros.Estado)
                    .SetParameter("tipo", parametros.Tipo);
                    
                listaEntidad = (List<Cliente>) query.List<Cliente>();
            }
            catch (Exception e)
            {
                #region Instrumentacion Error
                if (Log.InfoHabilitado)
                    Logger.Log.Info(e.Message + " " + e.InnerException);
                #endregion
            }
            finally
            {
                Session.Close();
            }
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Logger.Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return listaEntidad;
        }
    }
}
